#pragma once
#ifndef SMPPSTRUCTURES_HPP
#define SMPPSTRUCTURES_HPP

#include "SMPPConstants.hpp"

using namespace smpp::constants;

namespace smpp {
namespace pdu{

class SMPP_DLLPRFX DestAddress
{
	quint8 _DestFlag;
	quint8 _TON;
	quint8 _NPI;
	CoctetString _Address_DistrListName;
public:
	DestAddress(const quint8 nTON = 0,
		const quint8 nNPI = 0, 
		const CoctetString &nAddress = "");

	DestAddress(const CoctetString &);

	DestAddress(const DestAddress &);

	const bool operator ==(const DestAddress &) const;

	const bool operator !=(const DestAddress &) const;

	DestAddress &operator =(const DestAddress &);

	const quint8 getDestFlag() const;

	void setAddress(const quint8,const quint8,const CoctetString &);

	void setDistrListName(const CoctetString &);

	const quint8 getTON() const;

	const quint8 getNPI() const;

	const CoctetString &getAddressOrDistrListName() const;

	const quint8 getLength() const;
};

class UnsuccessSME
{
	quint8 _DestAddrTON;
	quint8 _DestAddrNPI;
	CoctetString _DestinationAddr;
	quint32 _ErrorStatusCode;
public:
	UnsuccessSME(const quint8 nDestAddrTON = 0, 
		const quint8 nDestAddrNPI = 0,
		const CoctetString &nDestinationAddr = "",
		const quint32 nErrorStatusCode = 0);

	UnsuccessSME(const UnsuccessSME &);

	const bool operator ==(const UnsuccessSME &) const;

	const bool operator !=(const UnsuccessSME &) const;

	UnsuccessSME &operator =(const UnsuccessSME &);

	void setDestAddrTON(const quint8);

	const quint8 getDestAddrTON() const; 

	void setDestAddrNPI(const quint8);

	const quint8 getDestAddrNPI() const; 

	void setDestinationAddr(const CoctetString &);

	const CoctetString &getDestinationAddr() const; 

	void setErrorStatusCode(const quint32);

	const quint32 getErrorStatusCode() const;

	const quint8 getLength() const;
};

}
}

#endif
